///////////////////////////////////////////////////////////////////////////////
//	FILENAME:	Divider.m
//	SUMMARY:	a trivial annotation denoting a logical/graphical divider.
//	SUPERCLASS:	Object
//	INTERFACE:	None
//	PROTOCOLS:	<Annotation, Tool, ASCIISupport, HTMDSupport>
//	AUTHOR:		Rohit Khare
//	COPYRIGHT:	(c) 1994 California Institure of Technology, eText Project
///////////////////////////////////////////////////////////////////////////////
//	DESCRIPTION
//		Does its job by displaying a horizontal image the width of the window.
///////////////////////////////////////////////////////////////////////////////
//	HISTORY
//  06/17/94:	HTMD protocol added. RK and TRZ
//	05/13/94:	Created. First actual implementation.
///////////////////////////////////////////////////////////////////////////////

#import "../eTextKernel.h"
#define	_DividerVERSION	10

@interface Divider:Object <Annotation, Tool, ASCIISupport, HTMDSupport,LaTeXSupport>
{	id	theImage;
	id  theText;
	int	highlighted;
	NXCoord lMargin;
}
@end
@implementation Divider
+ toolAwake:theApp
{
	[theApp   registerAnnotation: [Divider class] 
							name: "Divider"
					RTFDirective: "Divider"
					   menuLabel: "Insert Divider..."
						 menuKey: '\0'
						menuIcon: (NXImage *) nil];
	return self;
}
- init {[super init]; theImage = theText = nil; highlighted = 0; lMargin = 0.0; return self;}
- initFromPboard:thePB inDoc:theDoc linked:(BOOL) linked {return [self init];}
- calcCellSize:(NXSize *)theSize {
	NXCoord r,t,b;
	NXRect bounds;
	
	if (theText) {
		[theText getMarginLeft:&lMargin right:&r top:&t bottom:&b];
		[theText getBounds:&bounds];
		theSize->width = NX_WIDTH(&bounds) - lMargin - r; 
	} else 
		theSize->width = 1024.0;
	theSize->height = 6.0; 
	return self;
}
- drawSelf:(const NXRect *)rect inView:view
	{	NXRect tmpRect,bounds;
	
		theText = view;
		tmpRect.origin.x = lMargin;
		tmpRect.origin.y = NX_Y(rect) - NX_HEIGHT(rect);
		tmpRect.size.height = NX_HEIGHT(rect);
		tmpRect.size.width = NX_WIDTH(rect);
		[view getBounds:&bounds];
		NXDrawButton(&tmpRect, &bounds);
		PSsetgray(NX_BLACK);
		//PSsetgray(highlighted ? NX_DKGRAY : NX_BLACK);
		//PSmoveto(lMargin, NX_Y(rect) + (NX_HEIGHT(rect)/2));
		//PSsetlinewidth(2.0);
		//PSrlineto(NX_WIDTH(rect),0);
		//PSstroke();
		return self;
	}
- highlight:(const NXRect *)rect inView:view lit:(BOOL)flag
	{highlighted = !highlighted; NXHighlightRect(rect);return self;}
- (BOOL)	trackMouse:(NXEvent *)theEvent
			inRect:(const NXRect *)rect
			ofView:view
	{return NO;}
- readRichText:(NXStream *)stream forView:view 
{	
	int		i;
	char 	c;
	
	if(c=NXGetc(stream)=='}') //version 0
		NXUngetc(stream);
	else {
		NXUngetc(stream);
		NXScanf(stream, "%d ", &i);
		if (i != _DividerVERSION) {
			// bad version block.
			NXLogError("Divider found unparseable version %d at position %d", i, NXTell(stream));
		return nil;
		}
	}
	return self;
}

- writeRichText:(NXStream *)stream forView:view
	{ NXPrintf(stream,"%d ",_DividerVERSION);return self;}
- writeASCII:(NXStream *)stream forView:view
{
	NXPrintf(stream, "\n------------------------------------------------------------\n");
	return self;
}
- writeLaTeX:(NXStream *) stream forView:view
{
	NXPrintf(stream,"\n\\hrule\n");
	return self;
}
- writeHTML:(NXStream *)stream forView:view
{
	NXPrintf(stream,"\n<HR>\n");
	return self;
}
@end